package com.visionet.school.app.web.common.utils;

import org.apache.commons.lang3.StringUtils;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by hxpeng on 2017/3/2.
 */
public class PageUtils {

    public  static PageRequest getPageRequestInfo(PageInfo pageInfo,String sortType){
        Sort sort;
        if(StringUtils.isNotBlank(sortType)){
            sort = new Sort(Sort.Direction.ASC, sortType);
        }else{
            sort = new Sort(Sort.Direction.ASC, "id");
        }
        return new PageRequest(pageInfo.getPageNumber() - 1,pageInfo.getPageSize(), sort);
    }

    public  static PageRequest getPageRequestInfo(PageInfo pageInfo){
        return new PageRequest(pageInfo.getPageNumber() - 1,pageInfo.getPageSize());
    }


    /**
     * 封装分页数据到Map中。
     */
    public static Map<String, Object> getPageMap(Page<?> objPage) {
        Map<String, Object> resultMap = new HashMap<String, Object>();
        resultMap.put(Constants.PAGE_RESULT_LIST, objPage.getContent()); // 数据集合
        resultMap.put(Constants.PAGE_TOTAL_Item_SIZE, objPage.getTotalElements()); // 总记录数
        resultMap.put(Constants.PAGE_TOTAL_PAGE_SIZE, objPage.getTotalPages()); // 总页数 因为默认把0算进去了
        resultMap.put(Constants.PAGE_INDEX, objPage.getNumber() + 1); // 当前页码
        resultMap.put(Constants.PAGE_SIZE, objPage.getSize()); // 每页显示数量
        return resultMap;
    }

    /**
     * 创建分页请求。
     */
    public static PageRequest buildPageRequest(int pageNum, int pageSize, String sortType, String direction) {
        Sort sort = null;

        if (!StringUtils.isNotBlank(sortType)) {
            return new PageRequest(pageNum - 1, pageSize);
        } else if (StringUtils.isNotBlank(direction)) {
            if (Sort.Direction.ASC.equals(direction)) {
                sort = new Sort(Sort.Direction.ASC, sortType);
            } else {
                sort = new Sort(Sort.Direction.DESC, sortType);
            }
            return new PageRequest(pageNum - 1, pageSize, sort);
        } else {
            sort = new Sort(Sort.Direction.ASC, sortType);
            return new PageRequest(pageNum - 1, pageSize, sort);
        }
    }

    /**
     * 创建分页请求(该方法可以放到util类中).
     */
    public static PageRequest buildPageRequest(int pageNum, int pageSize, String sortType) {
        return buildPageRequest(pageNum, pageSize, sortType, null);
    }

    /**
     * 创建分页请求
     */
    public static PageRequest buildPageRequest(int pageNum, int pageSize, Sort sort) {
        return new PageRequest(pageNum - 1, pageSize, sort);
    }

    /**
     * 创建分页请求(该方法可以放到util类中).
     */
    public static PageRequest buildPageRequest(int pageNum, int pageSize) {
        return buildPageRequest(pageNum, pageSize, null, null);
    }

}
